﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace NumericalCalculations
{ 

    //klasa koja ce predstavljati neku vrstu itertora kroz klase koje nasledjuju ndimarray
    //omogucava prolazenje kroz ndimarray koriscenjem operatora [], sto dovodi do nezavisnosti
    //prolaska kroz ndimenzionalnu matricu i strukture 
    public class Counter
    {
        private int[] limits;
        private int[] current;
        private int size;


        public Counter(int[] args)
        {
            this.size = args.Count();
            this.limits = new int[size];
            this.current = new int[size];
            for (int i = 0; i < size; i++)
            {
                limits[i] = args[i];
                current[i] = 0;
            }
        }


        //prikazuje trenutnu vrednot brojaca
        public int[] getCurrent()
        {
            return this.current;
        }


        //postavlja niz-brojac na nulu
        public void reset()
        {
            for (int i = 0; i < size; i++)
                current[i] = 0;
        }

        //proverava daa li je niz-brojac dosao do kraja
        public bool isAtEnd()
        {
            bool p = true;
            p = p && (current[0] == limits[0]);
            for (int i = 1; i < size; i++)
                p = p && (current[i] == 0);
            return p;
        }

        //metod koji povecava za jedan niz-brojac
        public void plusPlus()
        {
            current[size - 1]++;
            for (int i = size - 1; i > 0; i--)
            {
                if (current[i] == limits[i] )
                {
                    current[i] = 0;
                    current[i - 1]++;
                   
                }
            }
            

        }



    }
}
